SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paEjecutarLicencia]

@Tramite INT

AS
SET NOCOUNT ON
DECLARE @Error INT
DECLARE @Tracking INT
DECLARE @ReparticionDestino INT
DECLARE @Responsable INT
DECLARE @Paso INT
DECLARE @TareaPosterior INT
DECLARE @Tarea INT
DECLARE @NroOrden INT
DECLARE @MaxNroOrden INT
SET @Error = 0

BEGIN TRANSACTION

-- Obtengo el tracking actual a actualizar
SELECT TOP 1 @Tracking = IdTracking, @Tarea = T.IdTarea, @Paso = P.IdPaso, @NroOrden = P.NroOrdenEnTarea, @TareaPosterior = T.Posterior, @ReparticionDestino = ReparticionDestino, @Responsable = Responsable
	FROM tb_Tracking TT 
	INNER JOIN tb_Tareas T ON T.IdTarea = TT.Tarea
	INNER JOIN tb_Pasos P ON P.Tarea = T.IdTarea
	WHERE TipoDePaso = 7 AND Estado = 4 AND Tramite = @Tramite
	AND NOT EXISTS(SELECT top 1 Tracking  FROM tb_TrackingDePasos WHERE Tracking = TT.IdTracking AND Paso = P.IdPaso)
	ORDER BY P.NroOrdenEnTarea

-- Inserto el paso completado
INSERT tb_TrackingDePasos (Tracking, Paso, VistoBueno)
	VALUES(@Tracking, @Paso, 'S')

SELECT @Error = @@ERROR

IF @Error <> 0 GOTO Salir

-- Obtengo el max nro de orden de la tarea
SELECT @MaxNroOrden = MAX(NroOrdenEnTarea) FROM tb_Pasos WHERE Tarea = @Tarea

-- Si es el ultimo paso de la tarea, actualizo el tracking e inserto el nuevo
IF @NroOrden = @MaxNroOrden BEGIN

	-- Actualizo el tracking de tareas
	UPDATE tb_Tracking SET Estado = 7, Hasta = GETDATE() WHERE IdTracking = @Tracking

	SELECT @Error = @@ERROR

	IF @Error <> 0 GOTO Salir

	-- Inserto el siguiente tracking
	INSERT INTO tb_Tracking (Tramite, NroSubTramite, Tarea, Desde, ReparticionDestino, Responsable, Estado)
		VALUES(@Tramite, 0, @TareaPosterior, GETDATE(), @ReparticionDestino, @Responsable, 4)

	SELECT @Error = @@ERROR

	IF @Error <> 0 GOTO Salir

END

Salir:

IF @Error = 0
	COMMIT TRANSACTION
ELSE
	ROLLBACK TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paEjecutarLicencia] TO [GestionDeDocumentos]
GO
